LookML Dashboard含むLookMLファイルの開発環境➟本番環境へのデプロイをWebhook使って試してみた #looker

LookML Dashboard含むLookMLファイルの開発環境➟本番環境へのデプロイをWebhook使って試してみた #looker

Clock Icon2021.02.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

さがらです。

Lookerを開発環境と本番環境で分けて使用している場合、「本番環境へのデプロイどうしよう…」と悩まれる方もいるのではないでしょうか。

そこで、LookML DashboardWebhookを使用してLookerのデータモデルもダッシュボードも一括で本番環境へデプロイする方法を試してみました。

その内容を本ブログにてまとめてみます。

LookML Dashboardとは

Lookerにおいてダッシュボードを作るときは、基本的にGUIで作成します。このGUIで作成するダッシュボードを公式Doc上では、User-Defined Dashboardと呼んでいます。

一方で、ダッシュボードをLookMLを用いてコードで定義することも可能です。このLookMLで定義したダッシュボードのことをLookML Dashboardと言います。

通常のUser-Defined Dashboardだと、ダッシュボードなどのコンテンツのコード化が出来ません。 つまり本番環境にデプロイ時にAPIやLookerDeployerなどのOSSがほぼ必須となってしまいます。

しかし、LookML Dashboardならばダッシュボードもコード化してしまうため、Github等用いたリポジトリ上のやり取りだけで本番環境へのデプロイをすることが出来ます。(この手順について本ブログでまとめます)

より詳しくLookML Dashboardについて知りたい場合には、是非公式Docをご確認ください。

開発環境➟本番環境のデプロイ試してみる

では早速、本題である「LookML Dashboard含むLookMLファイルの開発環境➟本番環境のデプロイ」の説明に移りたいと思います。

追記:2021/5/27

このブログの方法だと、「開発環境と本番環境に同時に記述したコードがデプロイされてしまうため、開発環境のProductionモードでテストする間がない」という問題が発生します。

「開発環境のProductionモードでテスト➟本番環境へデプロイ」という本来あるべき手順で進める方法は、Deployment Managerという機能を用いるのですが、下記のブログでまとめていますので、こちらを御覧ください…

以下に説明が続く方法では、Webhookを用いたデプロイ際には参考になるかと思いますので、興味がある方は続けて本ブログを御覧ください。

前提条件

インスタンスを2つ用意できないため、1つのインスタンス内で開発環境想定プロジェクト、本番環境想定プロジェクト、2つプロジェクトを用意して検証してみたいと思います。

開発環境想定プロジェクト

本検証においては、sagara_developmentというプロジェクト名で作成します。

各modelファイルとviewファイルはプロジェクト作成時に自動生成されたファイルそのままの内容ですが、こちらの手順に沿って、LookML Dashboardを1つ作成しておきます。

LookML Dashboardに関する注意点としては、「使用しているmodelファイル上で、~.dashboard.lookmlファイルをinclude」した上でデプロイしないと、ダッシュボードとして閲覧が出来ないためご注意ください。

Githubのリポジトリも下図のように作って、開発環境想定プロジェクトに紐付けておきます。

本番環境想定プロジェクト

本検証においては、sagara_productionというプロジェクト名で作成します。

オプションは「Blank Project」で作成します。

本番環境想定プロジェクトに紐付けるGithubのリポジトリは、先程開発環境想定プロジェクトに紐付けたものと同じリポジトリを指定します。

開発環境➟本番環境のデプロイに必要な手順

こちらに記す手順1と手順2は、開発環境プロジェクト、本番環境プロジェクト、どちらでも必要です

手順1.Webhookの設定

順を追って説明します。

まず対象のプロジェクトの「Project Configuration」から、「Github Integration」をPull Requests Requiredにして、Webhook用のURLを確認します。このURLとWebhookを使って、Githubのmasterブランチにマージされた内容を、Lookerのproductionモードに反映させるように設定します。

次に、同じく対象のプロジェクトの「Project Configuration」から、「Webhook Deploy Secret」内の「Set Webhook Secret」を押します。

すると、Secretが表示されます。こちらの内容も次の設定で必要となるため、忘れないようにメモをしておきましょう。

続いて、紐付けているGithubのリポジトリに移動して、「Settings」➟「Webhooks」➟「Add Webhook」を押します。

新規のWebhookの設定画面が表示されますので、下図のように入力します。

デフォルト値から変えたところは以下2点です。

  • Payload URL
    • 先程「Github Integration」で確認したWebhook用のURLを入力します
  • Secret
    • 先程「Webhook Deploy Secret」で確認したSecretを入力します

入力が終わったら、末尾の「Add webhook」を押します。

※補足:手順1で起こりうるWebhookのエラー

ここで補足説明となりますが、実際に私が検証しているときにエラーになったことがあったので、そのエラーについて原因と対策を記します。

・1つ目:403エラーが返ってくる

【原因】このエラーの主な原因は、Payload URLに指定したURLが間違っていたり、Secretの内容が間違っていることが原因です。

【対策】URLやSecretを見直して、正しい値に直しましょう!

・2つ目:404エラーが返ってくる

【原因】対象のプロジェクトがproductionモードにMerge&Deployされたことが一度もないときに発生します。この場合、対象のプロジェクトがproductionモードに反映されていないので、productionモードに対して作用するWebhookのURLも機能しなくなってしまいます。

【対策】一度対象のプロジェクトをMerge&Deployして、productionモードに反映させましょう!

手順2.Advanced deploy modeをONにする

対象のプロジェクトの「Project Configuration」から、「Deployment」の中に「Enable Advanced Deploy Mode」というチェック項目があるため、こちらにチェックを入れます。

この項目にチェックを入れると、Webhook、Deployment Manager、API endpoint、これら3つの方法でしかLookerのProductionモードにデプロイすることができなくなります。

必須項目ではないのですがDeployment Managerを使用できるようになるため、Productionモードに反映させるコミットを履歴から選ぶ事ができるようになります。

より詳細は下記の公式Docをご確認ください。

動作確認

では、開発環境想定プロジェクト「sagara_development」からデプロイを行った時、本番環境想定プロジェクト「sagara_production」の内容も変更されているか、確認してみます。

まず、変更前のproductionモードは下図のような状態です。

ここで、「sagara_development」の「limit:10」を「limit:20」に変えてデプロイしてみます。

以下、ズラズラとマージされるまでのプロセスの画像を載せておきます。

では、改めて開発環境想定の「sagara_development」と本番環境想定の「sagara_production」、双方のproductionモードの内容を確認してみます。

開発環境想定の「sagara_development」プロジェクトとGithubリポジトリのMergeまでしか行っていませんが、下図の通り、本番環境想定の「sagara_production」のlimitパラメータの内容も変わっていることがわかるかと思います!

最後に

いかがでしたでしょうか!

Embed等を使用したときには開発環境と本番環境を明確に分ける必要が出てくると思いますが、この手順ならば開発環境の内容を本番環境にスムーズに反映させることが可能です。

また、LookML Dashboardを併せて使うことで、データモデルだけでなくダッシュボードなどのコードも一括でデプロイすることが出来ます。

ぜひ、お試しください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.